//gulp.task(name[, deps], fn) 定义任务  name：任务名称 deps：依赖任务名称 fn：回调函数
//gulp.src(globs[, options]) 执行任务处理的文件  globs：处理的文件路径(字符串或者字符串数组)
//gulp.dest(path[, options]) 处理完后文件生成路径


let gulp = require('gulp');
let less = require('gulp-less');
let plugins = require('gulp-load-plugins')();
let app={
    jsFiles:[
        'src/js/app/app.js',
        'src/js/app/app.api.js',
        'src/js/app/app.template.js',
        'src/js/app/app.pages.js',
        'src/js/app/app.pages.index.js',
        'src/js/app/app.pages.statistics.js',
        'src/js/app/app.pages.colorTheme.js',
    ]
};
//开启一个任务（js:任务名称），这里只是合并使用的库文件js
gulp.task('js-lib', function () {
    //加上return之后，返回一个stream（gulp.src对象），目的为了确保task在执行的时候能够按照顺序进行，并依次完成，然后注入
    return gulp.src(['./src/js/lib/echarts.min.js', './src/js/lib/framework7.min.js'])  //gulp.src() 指定源文件
    // .pipe(plugins.babel()) //将es6代码编译成es2015
        .pipe(plugins.concat('lib.js')) //合并js代码
        // .pipe(gulp.dest('./dist/js')) //将合并后的js代码输出到build/js目录下
        // .pipe(plugins.uglify()) //进行压缩JS文件
        .pipe(plugins.rename(function (path) { //修改压缩后的文件名称，防止覆盖上边的输出
            // {filename:'all.js',basename:'base',extname:'js'}
            path.basename += '.min'; // 在basename的基础上加上min，表示此文件为同名称文件的压缩版文件
        }))
        .pipe(gulp.dest('./dist/js')); //将压缩后的文件进行输出到指定目录
});

gulp.task('js-app', function () {
    //加上return之后，返回一个stream（gulp.src对象），目的为了确保task在执行的时候能够按照顺序进行，并依次完成，然后注入
    return gulp.src(app.jsFiles)  //gulp.src() 指定源文件
    // .pipe(plugins.babel()) //将es6代码编译成es2015
        .pipe(plugins.concat('app.js')) //合并js代码
        .pipe(gulp.dest('./dist/js')) //将合并后的js代码输出到build/js目录下
    // .pipe(plugins.uglify()) //进行压缩JS文件
    // .pipe(plugins.rename(function (path) { //修改压缩后的文件名称，防止覆盖上边的输出
    //     // {filename:'all.js',basename:'base',extname:'js'}
    //     path.basename += '.min'; // 在basename的基础上加上min，表示此文件为同名称文件的压缩版文件
    // }))
    // .pipe(gulp.dest('./dist/js')); //将压缩后的文件进行输出到指定目录
});

//合并css文件和压缩
gulp.task('css-lib', function () {
    let  cleanCSS = require('gulp-clean-css');

    //加上return之后，返回一个stream（gulp.src对象），目的为了确保task在执行的时候能够按照顺序进行，并依次完成，然后注入
    return gulp.src(['./src/css/framework7.material.css',
        './src/css/framework7.material.colors.css',
        './src/css/material-icons.css',
        './src/css/kitchen-sink.css'])  //gulp.src() 指定源文件
    // .pipe(plugins.babel()) //将es6代码编译成es2015
        .pipe(plugins.concat('lib.css')) //合并js代码
        // .pipe(gulp.dest('./dist/css')) //将合并后的js代码输出到build/js目录下
        .pipe(cleanCSS())
        .pipe(plugins.rename(function (path) { //修改压缩后的文件名称，防止覆盖上边的输出
            // {filename:'all.js',basename:'base',extname:'js'}
            path.basename += '.min'; // 在basename的基础上加上min，表示此文件为同名称文件的压缩版文件
        }))
        .pipe(gulp.dest('./dist/css')); //将压缩后的文件进行输出到指定目录
});

//拷贝静态资源
gulp.task('copy', function () {
    gulp.src('./src/img/*').pipe(gulp.dest('./dist/img'));
    gulp.src('./src/pages/*').pipe(gulp.dest('./dist/pages'));
    gulp.src('./src/fonts/*').pipe(gulp.dest('./dist/fonts'));
});

gulp.task('copy-dist', function () {
    gulp.src('./dist/**').pipe(gulp.dest('../FollowFinanceAPP/desktop/resources/app'));
    gulp.src('./dist/**').pipe(gulp.dest('../FollowFinanceAPP/cordova/platforms/android/app/src/main/assets/www'));
    gulp.src('./dist/**').pipe(gulp.dest('../FollowFinanceAPP/cordova/www'));
});

//编译less文件
gulp.task('testLess', function () {
    gulp.src('src/less/index.less') //该任务针对的文件
        .pipe(less()) //该任务调用的模块
        .pipe(gulp.dest('src/css')); //将会在src/css下生成index.css
});


gulp.task('rev-html', function () {
    let revAppend = require('gulp-rev-append');
    return gulp
        .src('dist/**/*.html')
        .pipe(revAppend())
        .pipe(gulp.dest('dist/'));
});

// gulp.task('default', ['testLess']); //定义默认任务 elseTask为其他任务，该示例没有定义elseTask任务
gulp.task('index', function () {
    let options = {
        removeComments: true,//清除HTML注释
        collapseWhitespace: true,//压缩HTML
        collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
        removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
        removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
        removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
        minifyJS: true,//压缩页面JS
        minifyCSS: true//压缩页面CSS
    };
    //先注入css文件，然后注入js库文件，然后自己写的js
    let target = gulp.src('./src/index.html'); //声明target保存，gulp.src源文件
    let sources = gulp.src(['./dist/js/lib.min.js','./dist/js/app.js', './dist/css/*.min.css']); //声明source，gulp.src保存源资源文件
    // target.pipe(plugins.inject(gulp.src('./dist/css/*.min.css'), {ignorePath: 'dist', addRootSlash: false}))
    //     .pipe(plugins.inject(gulp.src('./dist/js/*.min.js'), {ignorePath: 'dist', addRootSlash: false}))
    //     .pipe(plugins.inject(gulp.src('./dist/js/app.js')))
    //     .pipe(gulp.dest('./dist'))
    //     .pipe(plugins.connect.reload());


    return target.pipe(plugins.inject(sources, {ignorePath: 'dist', addRootSlash: false}))
        // .pipe(plugins.htmlmin(options)) //对html文件进行压缩
        .pipe(gulp.dest('./dist'))
        .pipe(plugins.connect.reload()); //通知浏览器自动刷新（此方法配合视图刷新功能）
});


//创建一个http服务，并对服务进行配置
gulp.task('serve', function () {
    plugins.connect.server({
        port: 8000, //指定端口号，在浏览器中输入localhost:8080就可以直接访问生成的html页面
        root: './dist', //指定html文件起始的根目录
        livereload: true //启动实时刷新功能（配合上边的connect.reload()方法同步使用）
    });
    console.log('server start at http://localhost:8000')
});

//创建一个监听，用于监听源文件index.html变化之后，及时通知其进行再次gulp index编译，并实时通知浏览器端视图刷新，做到自动刷新功能
gulp.task('watch', function () {
    gulp.watch('./src/**', ['copy','js-app','index','copy-dist']);
});


gulp.task('default', ['js-lib', 'js-app', 'css-lib', 'copy', 'index', 'serve', 'watch','copy-dist']); //将任务组合起来执行